#ifndef MAPLOCATION_H_
#define MAPLOCATION_H_

#include <string>

/*
 * Tipo enumerado que representa el tipo de objeto en el mapa.
 */
enum MapLocationType {
	Hotel, Restaurant, PoliceStation, School, Hospital, Unknown
};

/*
 * Clase que representa un objeto en el mapa. Consta de un id unico, un nombre al camino al que pertenece,
 * una altura dentro de ese camino y un tipo.
 */
class MapLocation {
public:
	/*
	 * Constructor, recibe el id, el nombre del camino al que pertenece, la numeracion y el tipo.
	 */
	MapLocation(std::string id, std::string roadName, int height,
			MapLocationType type, double x, double y, double rotation = 0.0);

	/*
	 * Destructor por defecto.
	 */
	virtual ~MapLocation();

	// Getters.
	virtual std::string getId();

	virtual std::string getRoadName();

	virtual int getHeight();

	virtual MapLocationType getType();

	virtual double getX();

	virtual double getY();

	virtual double getRotation();

	/*
	 * Metodo para comparar con otro objeto del tipo MapLocation. Compara por id.
	 */
	virtual bool equals(MapLocation* other);

private:
	virtual void setId(std::string id);
	virtual void setRoadName(std::string name);
	virtual void setHeight(int height);
	virtual void setType(MapLocationType type);
	virtual void setXPosition(double x);
	virtual void setYPosition(double y);
	virtual void setRotation(double rotation);
	double rotation;
	std::string id;
	std::string roadName;
	int height;
	MapLocationType type;
	double xPosition;
	double yPosition;
};

#endif /* MAPLOCATION_H_ */
